package top.lingma.annotation;


import top.lingma.exception.LimitException;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimit {


    /***
     * 前缀 可单独使用
     * @return
     */
    String prefix() default "";

    /***
     * 业务Key 可为空
     * @return
     */
    String key() default "";


    /**
     * permitsPerSecond 每秒产生的令牌数
     */
    long permitsPerSecond() default 100;

    int maxBurstSeconds() default 1000;

    /***
     * 受限处理器
     * 当访问受限时处理
     */
    Class<? extends RuntimeException> tokenInsufficient() default LimitException.class;

    /****
     * 等待时间 TimeUnit.MILLISECONDS
     * @return
     */
    long timeout() default 0;


}
